package cn.com.ninng;

/**
 * 移除数组中值为val的元素
 * @author liulekang
 * @createdate 2021/7/28
 */
public class Problem27 {

    public static void main(String[] args) {

        System.out.println(removeElement(new int[]{0,1,2,2,3,0,4,2},2));

    }



    public static int removeElement1(int[] nums, int val) {
        //感觉跟第26题差不多，应该也用双指针法
        // 3 2 2 3
        // 将重复元素与数组末尾待确认的元素互换位置，当前指针与后指针相遇时，则代表遍历完成，该指针位置即为目标数组中末尾元素的下标
        int j = nums.length -1;
        for (int i = 0; i <= j; ) {
            if (nums[i] == val) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
                j -= 1;
                i = 0;
            }else{
                i++;
            }
        }
        return j+1;
    }

    public static int removeElement(int[] nums, int val) {
        //感觉跟第26题差不多，应该也用双指针法
        // 3 2 2 3
        // 用不同的元素覆盖相等的元素
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != val) {
                nums[j] = nums[i];
                j++;
            }
        }
        return j;
    }


}
